/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package InterfazUsuario;

import Controlador.CTRL_AsistenciaDeFeria;
import Modelo.ENT_Trabajador;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author Isaac Paliza <anndysaac@hotmail.com>
 */
public class PersonalDeFeria extends HttpServlet {

    String idFeria = Usuario.instancia.get(0).getIdFeria();
    String url = Sistema.url;
    String index;

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     * @throws java.sql.SQLException
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, SQLException {

        String GuardarAsistencia = request.getParameter("GuardarAsistencia");
        String VerAsistencia = request.getParameter("VerAsistencia");
        String UpdateAsistencia = request.getParameter("UpdateAsistencia");
        if (VerAsistencia != null) {
            if (VerAsistencia(request, response) == false) {

            }
        }
        if (UpdateAsistencia != null) {
            if (UpdateAsistencia(request, response) == false) {

            }
        }
        if (GuardarAsistencia != null) {
            if (GuardarAsistencia(request, response) == false) {

            }
        }
        redireccionar(request, response);

    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (SQLException ex) {
            Logger.getLogger(PersonalDeFeria.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (SQLException ex) {
            Logger.getLogger(PersonalDeFeria.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
    List ListaAsistenciaC;

    private boolean VerAsistencia(HttpServletRequest request, HttpServletResponse response) throws SQLException {
        url = "/Vista/AdmDeFerias/PersonalDeFeria/VerPersonalDeFeria.jsp";
        String fechaActualSist = Controlador.Sistema.getFechaActualSistema();

        ListaAsistenciaC = CTRL_AsistenciaDeFeria.CargarListaACabezera(idFeria);
//        if (ListaAsistenciaC.isEmpty()) {
//            return false;
//        }
        List ListaAsistencia = CTRL_AsistenciaDeFeria.CargarListaHechaTrabajadores(idFeria, fechaActualSist, "2");
        if (ListaAsistencia.isEmpty()) {
            return false;
        }
        request.setAttribute("DatosdeAsistenciaCabezera", ListaAsistenciaC);
        request.setAttribute("DatosdeAsistencia", ListaAsistencia);
//        request.setAttribute("Mensaje", "Asistencia Guardada");
        return true;
    }

    private boolean GuardarAsistencia(HttpServletRequest request, HttpServletResponse response) throws SQLException {
        String fechaActualSist = Controlador.Sistema.getFechaActualSistema();
        ArrayList<ENT_Trabajador> ListaTrabajadores = (ArrayList<ENT_Trabajador>) CTRL_AsistenciaDeFeria.CargarListaTrabajadores(idFeria, fechaActualSist, "2");
        String Fecha = Controlador.Sistema.getFechaActualSistema();
        String Hora = Controlador.Sistema.getHoraActualSistema();
        String broque = "";
        for (int i = 0; i < ListaTrabajadores.size(); i++) {
            broque += "(" + (Controlador.Sistema.GenerarIDTabla("idAsistencia FROM t_asistencia") + i) + ", "
                    + "" + ListaTrabajadores.get(i).getIdTrabajador() + ", "
                    + "" + idFeria + ", "
                    + "'" + Fecha + "', "
                    + "'" + Hora + "', "
                    + "'" + request.getParameter(ListaTrabajadores.get(i).getIdTrabajador()) + "')";
            if (i != (ListaTrabajadores.size() - 1)) {
                broque += ",";
            }
        }
        CTRL_AsistenciaDeFeria.InsertarListaAsistencia(broque);
        List ListaAsistencia = CTRL_AsistenciaDeFeria.CargarListaHechaTrabajadores(idFeria, fechaActualSist, "2");

        request.setAttribute("DatosdeAsistenciaCabezera", ListaAsistenciaC);
        request.setAttribute("DatosdeAsistencia", ListaAsistencia);
        request.setAttribute("Mensaje", "Asistencia Guardada");
        return true;
    }

    private boolean UpdateAsistencia(HttpServletRequest request, HttpServletResponse response) throws SQLException {
        ArrayList<ENT_Trabajador> ListaTrabajadores = (ArrayList<ENT_Trabajador>) CTRL_AsistenciaDeFeria.CargarListaHechaTrabajadores(idFeria, Controlador.Sistema.getFechaActualSistema(), "2");
        String broque = "";
        String broque2 = "";
//        String Hora = Controlador.Sistema.getHoraActualSistema();
        List x = new ArrayList();
        for (int i = 0; i < ListaTrabajadores.size(); i++) {
            String idTrabajador = ListaTrabajadores.get(i).getIdTrabajador();
            String asistencia = request.getParameter(ListaTrabajadores.get(i).getIdTrabajador());

            if (!asistencia.equals(ListaTrabajadores.get(i).getAsistencia())) {
                broque += "WHEN " + idTrabajador + " THEN '" + asistencia + "'";
                x.add(idTrabajador);
            }
        }
        if (x.size() == 1) {
            broque2 += "(" + x.get(0) + ") ";
        }
        if (x.size() >= 2) {
            for (int i = 0; i < x.size(); i++) {
                if (i == 0) {
                    broque2 += "(" + x.get(i) + ", ";
                }
                if (i == (x.size() - 1)) {
                    broque2 += x.get(i) + ")";
                }
                if (i > 0 && i < x.size() - 1) {
                    broque2 += x.get(i) + ", ";
                }
            }
        }
        CTRL_AsistenciaDeFeria.UpdateListaAsistencia(broque + " END WHERE idAsistencia IN " + broque2);

        String fechaActualSist = Controlador.Sistema.getFechaActualSistema();
        List ListaAsistencia = CTRL_AsistenciaDeFeria.CargarListaHechaTrabajadores(idFeria, fechaActualSist, "2");

        request.setAttribute("DatosdeAsistenciaCabezera", ListaAsistenciaC);
        request.setAttribute("DatosdeAsistencia", ListaAsistencia);

        request.setAttribute("Mensaje", "Asistencia Actualizada");
        return true;
    }

    private void redireccionar(HttpServletRequest request, HttpServletResponse response) {
        ServletContext context = this.getServletContext();
        RequestDispatcher view = context.getRequestDispatcher(url);
        try {
            view.forward(request, response);
        } catch (ServletException ex) {
        } catch (IOException ex) {
        }
    }
}
